perm filename CONVHE.SAI[PIC,HE] blob sn#428037 filedate 1979-03-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN 
C00006 ENDMK
C⊗;
BEGIN 

REQUIRE "ABBREV.SAI" SOURCE!FILE ;
REQUIRE "<>{}" DELIMITERS ;
DEFINE ASKI(IVAR,STR) = <
		PSOUT(STR);
		IVAR← CVD(INCHWL);> ;


DEFINE IWAIT = <OUTSTR("WAITING FOR RETURN");
		INCHWL;> ;
INTEGER IBITS,OBITS,NLINES,INWORDS,OUTWORDS,LINLEN,OPIX,IPIX;
INTEGER ILINLEN ;
BOOLEAN TOSCALE ;

STRING STR ;

IBITS← 8 ;
ASKI(NLINES, "NO OF LINES:IN THE INPUT PICTURE");
ASKI(OBITS, "NO OF BITS IN THE OUTPUT PICTURE:");
ILINLEN ← NLINES DIV (36 DIV IBITS);
IF (NLINES MOD (36 DIV IBITS)) NEQ 0 THEN  
		ILINLEN ← ILINLEN + 1;
INWORDS ← NLINES * ILINLEN;
OPIX← 36 DIV OBITS ;
LINLEN ← NLINES DIV OPIX;
IF (NLINES MOD OPIX) NEQ 0 THEN LINLEN ← LINLEN + 1;
OUTWORDS ← NLINES * LINLEN ;
PSOUT("SCALE THE PICTURE?");
STR ← INCHWL ;
TOSCALE← IF (STR= "Y") OR (STR = "y") THEN TRUE ELSE FALSE ;

BEGIN "IN"
INTEGER VAL, VALMAX, VALMIN ;
INTEGER ICH,OCH,BYTEPTR,OBYTEPTR,I,J,NVAL ;
REAL SCALE ;
INTEGER ARRAY INARRY[1:INWORDS],OUTARRY[1:OUTWORDS] ;
INTEGER ARRAY DUMMY[1:141];
LABEL L1,L2,L3,L4,L5,L6;

L1: IWAIT;
COMMENT FIRST READ THE 8 BIT PACKED IMAGE ;
OUTSTR("INPUT FILE:");
ICH ← OPENFILE("","RC");
ARRYIN (ICH, INARRY[1],INWORDS);


IF TOSCALE THEN BEGIN
L2:IWAIT ;
COMMENT NOW FIND THE MAX AND THE MIN ;
BYTEPTR ← POINT(IBITS,INARRY[1],-1);
VALMAX ← VALMIN ← 0 ;
FOR I ← 1 STEP 1 UNTIL  NLINES * NLINES DO 
	BEGIN
	VAL ← ILDB(BYTEPTR) ;
	VALMAX ← VALMAX MAX VAL ;
	VALMIN ← VALMIN MIN VAL ;
	END  ;
OUTSTR("MAXVAL IS "&CVS(VALMAX)&CRLF);
OUTSTR("MINVAL IS "&CVS(VALMIN)&CRLF);

L3:IWAIT;

SCALE ← (2 ↑ OBITS) /(VALMAX - VALMIN) ;
END ;
BYTEPTR ← POINT(IBITS,INARRY[1],-1);
FOR I ← 1 STEP 1 UNTIL NLINES DO 
	BEGIN
	OBYTEPTR ← POINT (OBITS,OUTARRY[LINLEN*(I-1)+1],-1);
	FOR J ← 1 STEP 1 UNTIL NLINES DO 
		BEGIN
		VAL ← ILDB(BYTEPTR) ;
		NVAL ← (IF TOSCALE THEN (VAL - VALMIN) * SCALE 
				ELSE VAL );
		IDPB(NVAL,OBYTEPTR) ;
		END ;
	END  ;



L4:IWAIT;
OUTSTR("OUTPUT FILE:");
OCH ← OPENFILE("","WC");
COMMENT FIRST OUTPUT THE HEADER;
WORDOUT(OCH,-1);
WORDOUT(OCH,OBITS);
WORDOUT(OCH,LINLEN);
WORDOUT(OCH,1);
WORDOUT(OCH,NLINES);
WORDOUT(OCH,1);
WORDOUT(OCH,NLINES);
WORDOUT(OCH, ((-OUTWORDS) LSH 18) + '200);
ARRYOUT(OCH,DUMMY[1],120);
ARRYOUT(OCH,OUTARRY[1],OUTWORDS);
L5:IWAIT;

CFILE(ICH);
CFILE(OCH);

END "IN" ;
END ;